#ifndef IP_PACKET_H
#define IP_PACKET_H

#include <string>
#include <vector>
#include <fstream>
#include <iostream>
#include <cstring>

// 最大数据长度限制（例如 512 字节）
#define MAX_DATA_SIZE 512

// IPv4头部结构体，使用位域来限制每个字段的位数
struct IPv4Header {
    unsigned char version : 4;   // 版本 (4位)
    unsigned char ihl : 4;       // 首部长度 (4位)
    unsigned char tos : 8;       // 服务类型 (8位)
    unsigned short totalLength : 16;  // 总长度 (16位)
    unsigned short identification : 16;  // 标识符 (16位)
    unsigned short flags : 3;    // 标志位 (3位)
    unsigned short fragmentOffset : 13; // 分段偏移 (13位)
    unsigned char ttl : 8;       // 生存时间 (8位)
    unsigned char protocol : 8;  // 协议类型 (8位)
    unsigned short checksum : 16; // 校验和 (16位)
    unsigned int sourceIP : 32;  // 源IP地址 (32位)
    unsigned int destIP : 32;    // 目标IP地址 (32位)
};

// 计算校验和的函数
unsigned short calculateChecksum(unsigned short* addr, int len);

#endif
